#ifndef DEF__liste
#define DEF__liste

#include<string.h>

#include <pthread.h>
#define SOCKET int
 
typedef struct scellule Cellule;

struct scellule
		{
			char cmail[50];
			char cmot_de_pass[50];
			char cnom[50];
			char cprenom[50];
			int modeconnection;/*le prendra les valeur : 1->salon ou 0->prive*/
			int    iannais;
			SOCKET csock;
			pthread_t thread;
			SOCKET  tabsocket[10];/* ce tableau va contenir les sockets des client avec les quel il y aura une connection prive*/
			struct scellule *suivent;
		};

		
typedef struct sliste
		     {
		     	Cellule *adPremiere;
		     }Liste;
		    
void initialiser(Liste *L);
/*
	Precondition: L n'est pas initialisee
	Postcondition L est une liste vide (pointant sur NULL)
	Parametre en mode donnee-resultat L
*/

void testament(Liste *l);
/*
	Precondition: L est bien initialisee
	Postconditon: L est une liste vide pointant sur NULL
	Parametre en mode donnee resultat L
*/

int estVide(Liste L);
/*
	Precondition: L est bien initialiser
	Postcondition: Aucune
	Resultat: renvoi -1 si la n'est pas vide et 1 si nom
	Parametre en mode donnee L
*/

void afficher(Liste L);
/*	
	Precondition: L est bien initialiser
	Postcondition: rien
	Resultat: affiche le contenu de la liste
	Parametre en mode donnee L
*/

void ajouterEnQueue(Liste *L,int iannais,char cmail[],char cmot_de_pass[],char cnom[],char cprenom[],SOCKET  csock);
/*
	Precondition: L est bien initialisee
				iannais: contient la date de naissace du client 
				cmail:    contient l'identifiant unique du client
				cmot_de_passe: contient le mot de passe pour la connection du client
				cnom et cprenom: contienne respectivemant le nom et le prenom du client
	Postcondition: Les elements sont  mis en fin de liste
	Parametre en mode donnee resultat: L
	Parametre en mode donnee: iannais,cmail,cmot_de_pass,cnom,cprenom
*/

int testMailValide(Liste L,char cmail[]);
/*
	Precondition: L et cmail sont bien initialisee
	Postconditoin: on revoi 1 si le mail existe deja dans la BD ou 0 si non
	Parametre en mode donnee  L et cmail				
*/

int testPasswdMailValide(Liste L,char cmot_de_pass[],char cmail[],SOCKET  csock);
/*
	Precondition: L et cmot_de_pass sont bien initialisee
	Postconditoin: on revoi 1 si le PassWd et le mail existe deja dans la BD ou 0 si non
	Parametre en mode donnee  L  cmot_de_pass et cmail
				
*/

pthread_t rechercheThread(const Liste *L,SOCKET  csock);
/*
	Precondition: L est bien initial
	Postcondition: on renvoi la thred du client qui vient de se connecter
	Parametre en mode donnee resultat L
	Parametre en mode donneee csock
*/
#endif
